iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

本章節「Kubernetes (k8s)」概要

Day 5: Kubernetes 基本架構及安裝
Day 6: 使用 kubectl 指令管理 Kubernetes 集群
Day 7: Kubernetes Pod 與 Deployment 深入解析
Day 8: Kubernetes Service 與負載均衡機制
Day 9: Kubernetes Persistent Volumes (PV) 與 Persistent Volume Claims (PVC)

認識PV與PVC

Kubernetes 中的 Persistent Volume(PV)和 Persistent Volume Claim(PVC)是用來管理持久性存儲的。PV 是集群中的一塊存儲資源,可以被 Pod 使用,而 PVC 是用來請求這些存儲資源的聲明。PVC 允許 Pod 動態請求存儲,而不需要知道底層存儲的具體實現方式。這種機制確保了數據在 Pod 重啟或遷移時依然保留。

建立PV

打開編輯器 pv.yml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

打開編輯器 pvc.yml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

兩個文件長得超級像齁
區分的方法可以想做pv對應到了本地的/mnt/data目錄(或你的NAS,你的雲端存儲)
而pvc待會下面會呼叫到

如何應用他?還留著前兩篇部署的apache嗎?
打開編輯器 deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apache-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: apache
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
      - name: apache
        image: httpd:2.4
        ports:
        - containerPort: 80
        volumeMounts:
        - name: apache-storage
          mountPath: /usr/local/apache2/htdocs  # 指定容器中的掛載路徑
      volumes:
      - name: apache-storage
        persistentVolumeClaim:
          claimName: my-pvc  # PVC 的名稱

套用上面的建立與修改

kubectl apply -f pv.yml
kubectl apply -f pvc.yml
kubectl apply -f deployment.yml

至此,容器將使用 my-pvc 中的存儲
這樣即使 Pod 重啟或被重新調度或發生其他意外中斷
容器內 /usr/local/apache2/htdocs 的數據也會保留在 PV 裡面

驗證

kubectl get pods
kubectl get pvc
kubectl get pv

同場加映:自備NAS掛載

#安裝nfs軟體包
sudo apt install nfs-common
showmount -e 你的NAS域名
mount.nfs4 -o intr,nolock,noatime,proto=tcp 你的NAS域名:/路徑
#
sudo nano /etc/fstab

貼入以下內容(/mnt/public是想掛回來本地的目標路徑)

你的NAS域名:/路徑 /mnt/public nfs4 defaults,timeo=900,retrans=5,_netdev,auto 0 0

PVC這樣寫

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nfs-claim
  namespace: nfs
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client
  resources:
    requests:
      storage: 2Gi

記得deployment.yml的尾段也要加上volumeMounts:跟volumes:喔!


上一篇
Day 8: Kubernetes Service 與負載均衡機制
下一篇
Day 10: ELK Stack 安裝與多節點
系列文
DevOps需要的技能樹...(應該)都點得到!25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言